package flash

import (
	"encoding/gob"
	"github.com/jsoq/goblog/pkg/session"
)

//Flashes Flash 消息数组类型
type Flashes map[string]interface{}

//存入会话数据的key
var flashKey = "_flashes"

func init(){
	//在gorilla/sessions 中存储map和struct数据需要提前注册gob
	gob.Register(Flashes{})
}

//在INFO 里面添加info类型的消息提示
func Info(message string) {
	addFlash("info", message)
}

// Warning 添加 Warning 类型的消息提示
func Warning(message string) {
	addFlash("warning", message)
}

// Success 添加 Success 类型的消息提示
func Success(message string) {
	addFlash("success", message)
}

// Danger 添加 Danger 类型的消息提示
func Danger(message string) {
	addFlash("danger", message)
}

//All 获取所有消息
func All() Flashes {
	val := session.Get(flashKey)
	//读取是必须做类型检测
	flashMessages, ok := val.(Flashes)

	if !ok {
		return nil
	}

	//读取就销毁 删除
	session.Forget(flashKey)
	return flashMessages
}


// 私有方法，新增一条提示
func addFlash(key string, message string) {
	flashes := Flashes{}
	flashes[key] = message
	session.Put(flashKey, flashes)
	session.Save()
}